flags &= ~(GTK_STATE_FLAG_INSENSITIVE);
+ /* Focused state is meant to be set only on the widget
+ * being changed itself, not on the children */
+ if ((flags & GTK_STATE_FLAG_FOCUSED) !=
+ (priv->state_flags & GTK_STATE_FLAG_FOCUSED))
+ priv->state_flags |= GTK_STATE_FLAG_FOCUSED;
+
+ flags &= ~(GTK_STATE_FLAG_FOCUSED);
+
if (flags != 0 ||
operation == STATE_CHANGE_REPLACE)
{
if (!gtk_widget_is_sensitive (widget))
flags |= GTK_STATE_FLAG_INSENSITIVE;
+ if (gtk_widget_has_focus (widget))
+ flags |= GTK_STATE_FLAG_FOCUSED;
+
return flags;
}
gboolean has_focus)
{
widget->priv->has_focus = has_focus;
+
+ if (has_focus)
+ gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_FOCUSED, FALSE);
+ else
+ gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_FOCUSED);
}
/**